package net.lgy.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;

/**
 * MinIO配置类（确保配置绑定正确+有效期自动校验）
 */
@Data
@Component
@ConfigurationProperties(prefix = "minio") // 绑定配置文件中"minio"前缀的配置
public class MinioConfig {
    // 1. 基础配置（与配置文件key对应，小驼峰自动匹配横杠命名）

    private String endpoint;
    private String accessKey;
    private String accessSecret;
    private String bucketName;
    private String imgBucketName;

    // 2. 预签名URL有效期（默认10分钟，单位：毫秒，与配置文件key对应）
    // 注意：变量名改为小驼峰，确保@ConfigurationProperties能正确绑定
    private Long preSingUrlExpireTime = 60 * 10 * 1000L; // 默认10分钟（600000毫秒）

    /**
     * 核心方法：获取校验后的有效期（秒单位），自动截断7天内
     * 解决SigV4算法7天限制问题，避免手动计算错误
     */
    public long getPreSingUrlExpireSeconds() {
        // 7天对应的秒数（SigV4最大限制：60*60*24*7=604800秒）
        long maxExpireSeconds = TimeUnit.DAYS.toSeconds(7);
        // 将配置的毫秒有效期转为秒
        long configExpireSeconds = TimeUnit.MILLISECONDS.toSeconds(this.preSingUrlExpireTime);
        // 取较小值：若配置超7天，强制截断为7天
        long validExpire = Math.min(configExpireSeconds, maxExpireSeconds);

        // 日志打印（便于确认生效的有效期，排查配置问题）
        if (configExpireSeconds > maxExpireSeconds) {
            System.out.printf("[MinioConfig] 预签名URL配置有效期(%d秒)超7天限制，已截断为%d秒%n",
                    configExpireSeconds, maxExpireSeconds);
        }
        return validExpire;
    }
}